package a11_单调栈;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

/**
 * <p>
 * a01_每日温度复习3
 * </p>
 *
 * @author flyduck
 * @since 2025/3/20
 */
public class a01_每日温度复习3 {
    public static void main(String[] args) {
        dailyTemperatures(new int[]{73,74,75,71,69,72,76,73});
    }

    //找的是比现在大的数

    //栈里面存储的是这个数还没找到他的最大值

    //栈口是最小的还是最大的：
    //如果最小的在最里面，那么遍历的元素比最外面的小，但比最里面的最小的大有可能就错过了

    //找到的是最大的是第几天，所以存储下标，用遍历的下标 - 栈口的下标就是天
    public static int[] dailyTemperatures(int[] temperatures) {
        int[] result = new int[temperatures.length];

        Stack<Integer> stack = new Stack<Integer>();
        stack.add(0);

        for (int i = 1; i < temperatures.length; i++) {
            while (!stack.isEmpty() && temperatures[stack.peek()] < temperatures[i]) {
                Integer pop = stack.pop();
                result[pop] = i - pop;
            }
            stack.add(i);
        }

        return result;
    }
}
